<?php
use Think\Model;
class ExampleModel extends Model{
	/**
	 * 数据表前缀
	 * @var string
	 */
	protected $tablePrefix = UC_TABLE_PREFIX;

	/**
	 * 数据库连接
	 * @var string
	 */
	protected $connection = UC_DB_DSN;
	
	/**
	 * 定义自动验证
	 * @验证字段(必须) 数据库字段，表单字段皆可
	 * @验证规则(必须) 默认正则验证,如: array('account','/^[A-Za-z]+$/','账号必须使用英文!'),
	 * @错误提示(必须) 
	 * @验证条件(可选) 0存在字段就验证(默认)，1必须验证，2值不为空时验证
	 * @附加规则(可选) 方法，回调，长度，是否唯一等
	 * @验证时间(可选) 1新增数据时候验证,2编辑数据时候验证,3 全部情况下验证（默认）
	 */
	protected $_validate = array(	
		array('username', 'checkDenyMember', -2, self::EXISTS_VALIDATE, 'callback'), //用户名禁止注册
		//内置正则
		array('name','require','姓名必须'), //必须
		array('email','email','邮箱格式不正确'),//邮箱
		array('url','url','网址格式不正确'), //URL地址
		array('pice','currency','货币格式不正确'), //货币
		array('phone','number','电话必须为数字'), //字数
		
		//附加规则(可选)
		array('password','checkPwd','密码格式不正确',0,'function'), //函数(支持多字段)
		array('sex','checkSex','密码格式不正确',0,'callback'), //函数(支持多字段,方法必须在当前模型里写)
		array('repassword','password','确认密码不正确',0,'confirm'), //两字段是否相同
		array('number','0','次数不能为零',0,'equal'), //是否等于某个值
		array('value',array(1,2,3),'值的范围不正确！',2,'in'), //值属于
		array('name','1,12','姓名的长度不正确！',2,'length'), //长度
		array('age','20,25','年龄必须在20到25岁之间！',2,'between'), //范围
		array('date','2012-1-15,2013-1-15','结束日期必须在2012年1月15日至2013年1月15日！',2,'expire'), //是否是在有效期
		array('ip','201.12.2.5,201.12.2.6','您输入的IP不被允许，请重新输入！',2,'ip_allow'), //IP是否允许(允许列表)
		array('ip','201.12.2.5,201.12.2.6','您输入的IP已被禁止，请重新输入！',2,'ip_deny'), //IP是否禁止(禁止列表)
		array('name','','该名称已被使用！',2,'unique'), //是否唯一
		
	);
	
	
	/**
	 * 字段限制(仅处理指定字段数据)
	 */
	protected $insertFields = array('name','email','url','pice','phone'); //新增时
	protected $updateFields = array('name','email','url','pice','phone');  //更新时
	
	
	/**
	 * 字段映射(与数据库不一致的才要映射)
	 */
	protected $_map = array(
        'name' =>'username', // 把表单中name映射到数据表的username字段
        'mail'  =>'email', // 把表单中的mail映射到数据表的email字段
    );
    
	
	/**
	 * 定义自动完成
	 * @填充字段(必须) 数据库字段，表单字段皆可
	 * @填充内容(必须) 
	 * @填充条件(可选) 1 新增时（默认）2更新时 3全部情况下都要处理
	 * @附加规则(可选) 字符串(默认)、使用函数、回调方法、其他字段填充
	 */
	protected $_auto = array(
		array('status',1),  //(默认字符串类型)新增的时候把status字段设置为1
		array('fk_user_id','getUserid',1,'function'), //(使用自定义函数)插入时，将当前用户ID插入
		array('count','number',1,'field'), //(用其它字段填充)插入时，剩余领取次数为发放张数
		array('date','time',1,'function'), //(系统函数)插入时，自动插入当前时间戳
		array('userid','getsSessionId',1,'callback'), //(回调，方法必须写在当前页面)插入时，自动获取sessionId并插入
	);
	
	
	/**
	 * 定义字段(可减少IO加载的效率开销，提高性能)
	 */
	protected $fields = array(
		'id', 'username', 'email', 'age', '_pk' => 'id', '_autoinc' => true
	);
	
	
	/**
	 * 关联模型
	 */
	protected $_link = array(
		'profile' => array(
			'mapping_type' => HAS_ONE, //关联类型,这个在HAS_ONE 关联里面必须使用HAS_ONE 常量定义。
			'class_name'   => 'course', //关联的模型类名，可以不写
			'mapping_name' => '', //关联的映射名称，用于获取数据用,该名称不要和当前模型的字段有重复，否则会导致关联数据获取的冲突。如果mapping_name没有定义的话，会取class_name的定义作为mapping_name。如果class_name也没有定义，则以数组的索引作为mapping_name。
			
		)
	);

	
}
?>